/**

 * @CLASSDESCRIPER: 基于单链表手写实现栈的压栈，出栈 15：22-16：22完成
 * 出入栈在学习完单链表之后，更加清楚出栈入栈的原理是如何的
 * @AUTHOR:oh_young
 * @PHONE:13762094871
 * @EMIAL:13762094871@163.COM
 * @DATE: 2021/1/23
 */
public class OU_YANG_JIE_JUN_23_Q1<T>{

    private Node<T> one;

    public OU_YANG_JIE_JUN_23_Q1(){
        one=new Node<T>(null,null);//初始化栈顶结点

    }


    //入栈
    public void ru(T t){
        Node xin=new Node(t,one);//新加入结点指向栈顶结点
        one=xin;//新栈顶指向指向新入栈结点


    }


    //栈顶出栈，新栈顶指向原栈顶
    public T chu(){
        if (one==null){
            System.out.print("栈空了");
        }
        Node xin=one;
        one=one.next;

        return (T)xin.t;

    }

    //结点和结点指向
    private class Node<T>{
        T t;
        Node next;
    //以单链表出入栈
        public Node(T t,Node next){
            this.t=t;
            this.next=next;
        }
    }





    /**
         * @Description: 主方法，入出栈的调用
         * @Author: oh_young
         * @EMAIL:13762094871@163.COM
         * @Date: 2021/1/17 14:53

         **/
    public static void main(String[] args){
        OU_YANG_JIE_JUN_23_Q1 ou=new OU_YANG_JIE_JUN_23_Q1();
        ou.ru(1);
        ou.ru(2);
        ou.ru(4);
        ou.ru(8);


        System.out.println(ou.chu());
        System.out.println(ou.chu());
        System.out.println(ou.chu());
        System.out.println(ou.chu());
        System.out.println(ou.chu());

    }

         /**
         * 疑问1：再调用出栈的时候，直接报null，没有调用判断为空的输出内容
         **/
}
